package Ventanas;

import java.awt.BorderLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import BaseDeDatos.JDBCRisk;
import Logica.Jugador;
import Logica.Pais;
import Logica.Partida;

/**
 * Clase que sirve para que el usuario visualice
 * una ventana donde aparezcan las partidas que estan almacenadas
 * y pueda elegir cual quiere cargar.
 * @author equipo=08
 * 
 */
public class VentanaCargar extends JFrame implements ActionListener,
		MouseListener {

	private DefaultTableModel modeloTabla;
	private JTable tabla;
	private JPanel pBotones, pEtiqueta, pTabla;
	private JButton bAceptar, bCancelar;
	private JLabel etiq;
	private JDBCRisk baseDatos;
	private Vector listaPartidas;
	private String nombrePartida;
	private TextField tPartida;
	private int filaSeleccionada;
	private ArrayList<Integer> idJugadores;
	private ArrayList<Jugador> lJugadores;
	private Partida partidaCargar;
	private ArrayList<Integer> lPaises;

	/**
	 * Constructor de la ventana. Crea una ventana con un JPanel
	 * en el que aparecen las partidas que se encuentran en la base de datos
	 * alamcenadas.Tiene un JPanel donde aparecen las partidas y dos botones una 
	 * para aceptar y cargarla y otro para cancelar y volver a la ventana principal.
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public VentanaCargar() throws ClassNotFoundException, SQLException {
		pBotones = new JPanel();
		pEtiqueta = new JPanel();
		pTabla = new JPanel();
		etiq = new JLabel("Selecciona la partida");
		tPartida = new TextField(20);
		baseDatos = new JDBCRisk();
		bAceptar = new JButton("Aceptar");
		bCancelar = new JButton("Cancelar");
		bAceptar.addActionListener(this);
		bCancelar.addActionListener(this);
		pBotones.add(bAceptar);
		pBotones.add(bCancelar);
		setTitle("Cargar Partida");
		setResizable(false);

		modeloTabla = new DefaultTableModel();
		tabla = new JTable(modeloTabla);
		tabla.addMouseListener(this);
		JScrollPane scollTabla = new JScrollPane(tabla);
		pEtiqueta.add(etiq);

		this.setLayout(new BorderLayout());
		this.add(pEtiqueta, "North");
		this.add(scollTabla, "Center");
		this.add(pBotones, "South");
		baseDatos.conectar();
		listaPartidas = baseDatos.getListaPartida();
		baseDatos.desconectar();
		modeloTabla.addColumn("Partidas", listaPartidas);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(300, 300);
		this.setLocationRelativeTo(null);
	}

	
	@Override
	
	public void actionPerformed(ActionEvent e) {
		/**
		 * Si el usuario pulsa sobre el boton cancelar se cierra la
		 * ventana cargar y vuelve a la ventana principal.
		 */
		JButton boton = (JButton) e.getSource();
		if (boton == bCancelar) {
			try {
				this.dispose();
				VentanaPrincipal vP = new VentanaPrincipal();
				vP.setVisible(true);
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		} else {
			/**
			 * Si el usuario pulsa sobre el boton aceptar tras haber elegido
			 * una partida se carga una ventana juego con los datos almacenados 
			 * en la base de datos de la partida elegida
			 */
			try {
				String nPartida = (String) modeloTabla.getValueAt(
						filaSeleccionada, 0);
				idJugadores = new ArrayList<Integer>();
				lJugadores = new ArrayList<Jugador>();
				lPaises = new ArrayList<Integer>();
				int turno = 1;
				baseDatos.conectar();
				int idPartida = baseDatos.getIdPartida(nPartida);
				idJugadores = baseDatos.jugadoresPartida(nPartida);
				turno = baseDatos.getTurno(idPartida);
				lJugadores = baseDatos.datosJugadoresPartida(idJugadores,
						idPartida);
				baseDatos.desconectar();
				partidaCargar = new Partida(lJugadores.get(0),
						lJugadores.get(1), lJugadores.get(2),
						lJugadores.get(3), turno, idPartida);
				try {
					this.dispose();
					VentanaJuego ventana = new VentanaJuego(partidaCargar,
							false,false, new Pais());
					ventana.setVisible(true);
				} catch (URISyntaxException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}

	}

	@Override
	/**
	 * selecciona el contenido de una fila de la columna 
	 * partidas del JPanel de la ventana cargar.
	 */
	public void mouseClicked(MouseEvent e) {
		filaSeleccionada = tabla.rowAtPoint(e.getPoint());

	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	public static void main(String[] args) throws ClassNotFoundException,
			SQLException {
		// TODO Auto-generated method stub
		VentanaCargar prueba = new VentanaCargar();
		prueba.setVisible(true);
	}

}
